/*
 * Copyright 2009 Jiwei Xu (http://www.xujiwei.com)
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

provide("Tools.PolygonTool");

require("Tools.ToolBase");
require("Objects.PolygonObj");

PolygonTool = Class(ToolBase, (function() {

    var isStarted   = false,
        tmpObj = new PolygonObj();

    return {
        OnLButtonClick : function(view, e) {
            if (!isStarted) {
                view.GetDocument().SelectNone();
                view.SetObjectStyles(tmpObj);
                tmpObj.IsSelected = true;
                tmpObj.AddHandle(e);
                tmpObj.AddHandle(e);

                view.GetDocument().Add(tmpObj);

                isStarted = true;
            } else {
                tmpObj.MoveHandleTo(tmpObj.Handles.length - 1, e);
                tmpObj.AddHandle(e);
            }
        },

        OnMouseMove : function(view, e) {
            if (isStarted) {
                tmpObj.MoveHandleTo(tmpObj.Handles.length - 1, e);
                view.Update();
            }
        },

        OnLButtonDblClk : function(view, e) {
            if (isStarted) {
                isStarted = false;
                tmpObj.RemoveHandle(tmpObj.Handles.length - 1);
                view.Update();

                var cmd = new ObjectCreateCommand(tmpObj, {
                    Layout : view.GetDocument().GetCurrentLayout()
                });
                view.UndoManager.Push(cmd);

                tmpObj = new PolygonObj();
            }
        }
    };
})());

new PolygonTool();